iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0

最後要教的是,如何利用Python實作MQTT訂閱(Subscribe)的部分,若還沒看前兩篇關於利用Python實作連線到MQTT Broker伺服器,和如何利用Python實作發布主題(Publish)的話,請各位讀者先回去看這兩篇文章,再來看這篇,一步一步的實作,相信各位讀者跟著文章操作都能有對MQTT實作基本的認識喔!

那廢話不多說,我們就來看一下要怎麼利用Pytnon實作訂閱的部分吧!

訂閱主題

#定義訂閱函式
import paho.mqtt.client as mqtt

def subscribe(client, topic):
     #定義回呼函式(Callback function),當客戶端在收到訊息後會自動呼叫這個函式
    def on_message(client, userdata, msg):
        print(f"收到 {msg.payload.decode('utf-8')} 來自 {msg.topic} 這個主題")
    
    client.subscribe(topic) #訂閱主題
    #將回呼函數指定到client這個實例的on_message的屬性上,使客戶端收到訊息時會自動呼叫該函數
    client.on_message = on_message 
    #保持連線
    client.loop_forever()

subscribe(client, "/home/plug")

完整訂閱程式碼

import paho.mqtt.client as mqtt

def connect_MQTT_broker(broker_host, port):
    def on_connect(client, userdata, flags, rc):
        if (rc == 0):
            print("連線成功")
        else:
            print(f'連線失敗, 錯誤代碼={rc}')

    client = mqtt.Client()
    client.on_connect = on_connect
    client.connect(broker_host, port)
    return client

def subscribe(client, topic):
    def on_message(client, userdata, msg):
        print(f"收到 {msg.payload.decode('utf-8')} 來自 {msg.topic} 這個主題")
        
    client.subscribe(topic)
    client.on_message = on_message 
    client.loop_forever()

iron_client_sub = connect_MQTT_broker("broker.emqx.io", 1883)
subscribe(iron_client_sub, "/home/plug")

執行結果

訂閱客戶端這邊的執行結果會收到發布端的訊息

連線成功
收到 訊息: 0 來自 /home/plug 這個主題
收到 訊息: 1 來自 /home/plug 這個主題
收到 訊息: 2 來自 /home/plug 這個主題
收到 訊息: 3 來自 /home/plug 這個主題
收到 訊息: 4 來自 /home/plug 這個主題
收到 訊息: 5 來自 /home/plug 這個主題
收到 訊息: 6 來自 /home/plug 這個主題
收到 訊息: 7 來自 /home/plug 這個主題
收到 訊息: 8 來自 /home/plug 這個主題
收到 訊息: 9 來自 /home/plug 這個主題
.
.
.

讀者可以先運行訂閱客戶端,接下來在運行發布客戶端,訂閱客戶端就可以接收到完整的訊息囉!

恭喜各位讀者利用Python實作完成MQTT的連線了,各位讀者如有疑問或建議,歡迎在下方留言一起討論!

那下一篇將教大家如何利用Python與作業系統互動。


上一篇
[DAY2]使用Python實作MQTT(二)
下一篇
[DAY4]使用Python與系統互動-os(一)
系列文
讓Python不拍勝-實用套件實作與介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言